package com.cskaoyan.wordmemorize.auth;

import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.stp.StpLogic;
import com.cskaoyan.wordmemorize.common.constant.CommonConstant;

/**
 *  todo StpLogic是多账户认证核心类，相当于一个独立的"权限管家"
 *       管理某一类用户（如管理员、普通用户）的登录状态（Session）。
 *       处理该类用户的权限校验（如检查角色、权限）。
 *       控制 Token 的生成、续期、销毁等生命周期。
 *       通过为不同用户类型创建不同的 StpLogic 实例（如 ADMIN 和 USER），实现账号体系的物理隔离，避免权限混乱。
 */

public class StpKit {

    // todo 创建了一个专门管理 admin类型账户 的会话工具, "admin" 表示这个实例只处理管理员账号的认证
    public static final StpLogic ADMIN = new StpLogic("admin");

    // todo 创建了一个专门管理 user类型账户 的会话工具, "user" 表示这个实例只处理用户账号的认证
    public static final StpLogic USER = new StpLogic("user");

    static {
        // todo 设定 StpUtil 使用的 SaTokenConfig 配置参数对象
        SaTokenConfig adminConfig = new SaTokenConfig();
        adminConfig.setTokenName(CommonConstant.ADMIN_LOGIN_TOKEN_KEY); // todo 设置请求头中传递的token名称
        adminConfig.setIsReadHeader(true); // todo 允许Sa-Token拦截器从HTTP请求头(Headers)中读取 Token
        adminConfig.setTimeout(60 * 60 * 24 * 7); // todo token有效期7天
        adminConfig.setTokenStyle("uuid");  // todo token生成格式为UUID
        adminConfig.setActivityTimeout(-1); // todo 设置 Token 的活动超时时间 -1表示永不过期, 只要token不过期长时间操作无所谓
        adminConfig.setIsConcurrent(true); // todo 允许同一账号多地登录
        adminConfig.setIsShare(true); // todo 启用 Token 共享功能
        adminConfig.setIsLog(true); // todo 启用日志记录功能
        adminConfig.setTokenStyle("uuid");
        ADMIN.setConfig(adminConfig);

        // 设定 StpUserUtil 使用的 SaTokenConfig 配置参数对象
        SaTokenConfig userConfig = new SaTokenConfig();
        userConfig.setTokenName(CommonConstant.APP_LOGIN_TOKEN_KEY);
        userConfig.setTimeout(60 * 60 * 24 * 7);
        userConfig.setIsConcurrent(true);
        userConfig.setTokenStyle("uuid");
        userConfig.setActivityTimeout(-1);
        userConfig.setIsShare(true);
        userConfig.setIsLog(true);
        userConfig.setIsReadHeader(true);
        userConfig.setLogLevel("debug");
        // 更多设置 ...
        USER.setConfig(userConfig);
    }

}
